centraldogma

Highly-available version-controlled service configuration repository based on Git, ZooKeeper and HTTP/2

APACHE-2.0 License

Stars
575

Bot releases are hidden (Show)

centraldogma -

Published by trustin over 6 years ago

New features

  • Client: Java
    • Automatic client-side load-balancing based on DNS query #228

Improvements

  • Client: Golang
    • Improved string conversion of ChangeType #224

Breaking changes

  • Client: Java
    • LegacyCentralDogmaBuilder.build() throws UnknownHostException.
centraldogma -

Published by trustin over 6 years ago

New features

  • Server

    • API responses are now compressed with deflate or gzip if requested, based on the accept-encoding header. #211
  • Client: Golang

    • Added watcher support to Golang library. #207

      // Create a Query with a Path to watch.
      query := &Query{Path: "/a.json", Type: JSONPath}
      // Create a FileWatcher which is notified when the specific file
      // in the "bar" repository in the "foo" project is modified.
      fw, _ := c.FileWatcher("foo", "bar", query)
      
      // Create a listener which prints the value when the watcher is notified.
      listener := func(revision int, value interface{}) { fmt.Println(value) }
      // Register it.
      fw.Watch(listener)
      
  • Client: Java

    • Added CentralDogmaEndpointGroup for Armeria. #105

      // Build a new EndpointGroup that fetches the endpoint list from Central Dogma.
      final CentralDogma dogma = new LegacyCentralDogmaBuilder()...build();
      final CentralDogmaEndpointGroup group = CentralDogmaEndpointGroup.of(
              dogma, "myProj", "myRepo", Query.ofJson("/endpoints.json")
              EndpointListDecoder.JSON);
      // Wait until the initial query succeeds.
      group.awaitInitialEndpoints();
      
      // Register the group and use it in the URI.
      EndpointGroupRegistry.register(
              "mygroup", group, EndpointSelectionStrategy.WEIGHTED_ROUND_ROBIN);
      final HttpClient client = HttpClient.of("http://group:mygroup/");
      final AggregatedHttpMessage res = client.get("/foo").aggregate().join();
      

Improvements

  • Server
    • Improved the performance of watch operations by caching initial tree comparison results. #214
    • Added jitters to watch timeouts and mirroring schedules to avoid thundering herd. #215 #217 #222

Bug fixes

  • Server
    • 'history' operation may return an incorrectly cached value. #212
    • I/O thread is blocked by a long watch operation. #213
    • Fixed a bug where a repository created via Thrift API is inaccessible via HTTP API. #218
    • Fixed a bug in metadata migration logic which sometimes prevented migration. #221

Dependencies

  • Armeria 0.63.1 -> 0.64.0
centraldogma -

Published by trustin over 6 years ago

New features

  • Added maxCommits query parameter to GET /api/v1/projects/{projectName}/repos/{repoName}/commits/{revision} API which is useful when you want to limit the number of commits to fetch. #202

Bug fixes

  • Non-administrators were able to access the metadata.json file which contains potentially confidential information. #199
  • A project owner was able to remove the meta repository, making the REST API and web UI stop to function. #203
  • Fixed an unexpected '500 Internal Server Error' when shutting down a server. #204

Dependencies

  • Armeria 0.62.0 -> 0.63.1
  • Spring Boot 1.5.10 -> 1.5.12
centraldogma -

Published by trustin over 6 years ago

Client

New features

  • #141 #172 Go client library

    • See the official GoDoc for more information.
    • CLI tool has been revamped to use the client library instead of sending an HTTP request by itself.
  • #169 Reorganization of Java client library

    • We will provide three Java client libraries:

      • Legacy Armeria-based Thrift client
      • Armeria-based REST client
      • Minimal REST client without Armeria dependency
    • There is only the legacy version that uses Thrift currently. Use the artifactId centraldogma-client-armeria-legacy until we provide the others.

    • Due to the reorganization, the instantiation of CentralDogma client has been changed in a backward-incompatible way:

      // Before
      CentralDogma oldDogma1 = CentralDogma.forHost("example.com");
      CentralDogma oldDogma2 = new CentralDogmaBuilder()...build();
      // After
      CentralDogma newDogma = new LegacyCentralDogmaBuilder()...build();
      
  • #184 Entry and QueryResult have been merged into a single type, Entry.

    CentralDogma dogma = ...;
    // Before
    QueryResult<JsonNode> res = dogma.watchFile("myProj", "myRepo", Revision.INIT,
                                                Query.ofJsonPath("/foo.json", "$"), 60000).join();
    // After
    Entry<JsonNode> res = dogma.watchFile("myProj", "myRepo", Revision.INIT,
                                          Query.ofJson("/foo.json"), 60000).join();
    
  • #184 Add Query.ofJson() and Query.ofText(), deprecating Query.identity()

    CentralDogma dogma = ...;
    // Before
    Entry<Object> entry = dogma.getFile("myProj", "myRepo", Rebision.HEAD,
                                        Query.identity("/foo.json")).join();
    JsonNode content = (JsonNode) entry.content();
    // After
    Entry<JsonNode> entry = dogma.getFile("myProj", "myRepo", Revision.HEAD,
                                          Query.ofJson("/foo.json")).join();
    JsonNode content = entry.content();
    
  • #184 Add more convenient methods to Entry.

    Entry<JsonNode> jsonEntry = ...;
    // Use Jackson to convert JsonNode into MyValue.
    MyValue myValue = jsonEntry.contentAsJson(MyValue.class);
    // Get the prettified textual representation.
    String prettyStr = jsonEntry.contentAsPrettyText();
    // It's now easier to map a value from a JSON file.
    CentralDogma dogma = ...;
    MyValue myValue = dogma.getFile("myProj", "myRepo", Revision.HEAD,
                                    Query.ofJson("/foo.json")).join()
                           .contentAsJson(MyValue.class);
    
  • #191 #193 Spring Boot 2 support

    • Use centraldogma-client-spring-boot1-* to integrate with Spring Boot 1.x.

Bug fixes

  • #165 More than one CentralDogma instance can be created with Spring Boot integration.
  • #171 NoClassDefFoundError when used with Spring Data

Deprecations

  • #184 Query.identity() has been deprecated in favor of Query.ofJson() and Query.ofText().
  • #184 CentralDogma.push() that requires an Author has been deprecated in favor of push() that does not require an Author.

Breaking changes

  • #169 Due to the reorganization, the instantiation of CentralDogma client has been changed in a backward-incompatible way.
    • See the 'new features' section above for more information.
  • #184 QueryResult has been removed in favor of Entry.
    • See the 'new features' section above for more information.
  • #184 Entry.content() now throws IllegalStateException instead of returning null when the Entry is a directory.

Server

New features

  • #133 Access control

  • #146 #147 TLS support

  • #181 Ability to serve HTTP and HTTPS on the same port

    • Specify http and https in the protocols section of dogma.json:

      {
        "ports": [ {
            "localAddress": { "host": "*", "port": 443 },
            "protocols": [ "http", "https" ]
        } ]
      }
      
  • #164 Read-only mode, which is allowed only to administrators

  • #167 Case-insensitive login name matching

    • Set caseSensitiveLoginNames to false to match login names case-insensitively.

Improvements

  • #186 Try again silently when LDAP server fails to respond during username-password authentication.
  • #185 Use Caffeine cache for web sessions, instead of Shiro's default implementation.
  • #177 Respond with the existing token if a user logs in again before the session expiration, so that tokens are not created unnecessarily.

Bug fixes

  • #192 Git-to-CD mirroring can stop permanently when the mirroring thread pool cannot mirror fast enough.

Dependencies

  • Armeria 0.60.0 -> 0.62.0
  • Curator 2.12.0 -> 4.0.1
  • futures-extra 3.0.0 -> 3.1.1
  • Go 1.9 -> 1.10.1
  • jGit 4.10.0 -> 4.11.0
centraldogma -

Published by trustin over 6 years ago

New features

  • #135 #142 Implement read-only mode for maintenance purpose
  • #143 Add HTTP access log
  • #145 Add session timeout option for administrative web UI. 7 days by default.

Bug fixes

  • #144 CentralDogma.forProfile() should choose the last matching profile so that it behaves same with Spring Boot.
  • #145 Default session timeout for administrative web UI is too small (30 minutes)

Dependencies

  • Armeria 0.59.0
centraldogma -

Published by trustin over 6 years ago

Bug fixes

  • Shaded JARs contain shaded dependencies.

Dependencies

  • Armeria 0.58.0 -> 0.58.1
centraldogma -

Published by trustin over 6 years ago

New features

  • #124 Addition and modification of more than one file in a single HTTP API call
  • #132 An HTTP API that normalizes a revision
  • #132 Allow specifying more than one JSON path expressions when querying a file via HTTP API

Bug fixes

  • #131 500 Internal Server Error on authentication failure

Dependencies

  • Armeria 0.58.0
  • Guava 24.0
  • Jackson 2.9.4
  • jGit 4.10.0
  • Spring Boot 1.5.10
centraldogma -

Published by minwoox almost 7 years ago

Improvements

  • #115 Refactor HTTP API v1 service

Bug fixes

  • #116 #117 #119 Various admin UI bug fixes
  • #118 Fix a bug where --connect CLI option does not work
centraldogma -

Published by trustin almost 7 years ago

New features

  • #91 First draft of the new HTTP API
    • Provided at /api/v1/
    • Not doucmented properly yet. Please stay tuned for the full documentation.
  • #98 Replica ID is now auto-generated.
    • Please remove the replicaId property in dogma.json.

Improvements

  • #99 #100 #104 #106 New dedicated storage for revision-to-commitId mappings for better performnce
    • Migration is performance automatically. No manual intervention required.
  • #102 Clean up and optimize JSON patch implementation
  • #109 #111 New dedicated storage for HTTP sessions for better performance and replication efficiency

Bug fixes

  • #99 An incorrect JSON patch is sometimes generated.
  • #99 An effectively empty commit made of UPSERTs does not fail with RedundantChangeException.
  • #108 IllegalArgumentException during token validation

Breaking changes

  • #97 security.ini has been renamed to shiro.ini.
  • #98 dogma.json must not have the replicaId proprety since the replica ID is auto-generated and stored into the data directory from this release.

Dependencies

  • Armeria 0.55.1 -> 0.56.0
  • Spring Boot 1.5.8 -> 1.5.9
centraldogma -

Published by trustin almost 7 years ago

New features

  • #81 (Client) Allow specifying a change callback when creating a bean using CentralDogmaBeanFactory.

Improvements

  • #78 #93 (Client) CentralDogma.forProfile() now registers an Armeria EndpointGroup with more recognizable group name.
  • #83 (Server) Use better Git repository format for better performance
  • #87 Use simpler JSON form for Revision

Dependencies

  • Armeria 0.54.1 -> 0.55.1
  • Caffeine 2.5.6 -> 2.6.0
  • Guava 23.2 -> 23.5
centraldogma -

Published by trustin almost 7 years ago

New features

Bug fixes

  • #30 Misleading 401 Unauthorized error message from administrative console when security is disabled.
  • #33 /docs is not redirected to /docs/.

Dependencies

  • Armeria 0.53.0 -> 0.54.1
  • Caffeine 2.5.5 -> 2.5.6
  • completable-futures 0.3.1 -> 0.3.2
  • Guava 23.0 -> 23.2
  • Jackson 2.8.9 -> 2.9.1
  • jGit 4.8.0 -> 4.9.0
  • Hibernate Validator 6.0.2 -> 6.0.4
  • Spring Boot -> 1.5.7 -> 1.5.8
centraldogma -

Published by trustin about 7 years ago

This initial open-source release contains the collective work of the following enthusiastic contributors at LINE Corporation:

  • Ki-bin Shin @bindung
  • Jun Cao @caojun221
  • Young-tae Seok @delegacy
  • Hyang-tack Lee @hyangtack
  • Ide Masahiro @imasahiro
  • Su-ahn Lee @inch772
  • Julie Kim @julnamoo
  • Yuto Kawamura @kawamuray
  • Minwoo Song @minwoox
  • Trustin Lee @trustin
Package Rankings
Top 15.05% on Repo1.maven.org
Badges
Extracted from project README
CI codecov.io Latest Release Version Discord Server