Skip to content

Releases: googleapis/google-cloud-java

0.8.0

Choose a tag to compare

@garrettjonesgoogle garrettjonesgoogle released this 09 Dec 00:24

Select clients going from Alpha to Beta

In this release, clients for four APIs are moving to beta:

  • Google Cloud BigQuery
  • Stackdriver Logging
  • Google Cloud Datastore
  • Google Cloud Storage

Their versions will have “-beta” on the end call out that fact. All other clients are still Alpha.

Features

  • QueryParameter support added to BigQuery, DATE/TIME/DATETIME added to LegacySQLTypeName (#1451)

Interface changes

  • Logging api layer: using resource name classes instead of strings where appropriate (#1454)

Test improvements

Several tests were flaky on AppVeyor, so improvements were made to make them more reliable.

  • BlockingProcessStreamReader (#1457)
  • BigQuery integration tests (#1456)
  • PubSub integration tests (#1453)
  • DNS tests: removed LocalDnsHelper and its test (#1446)

Despite that, integration tests were still failing on AppVeyor, so they have been disabled until they can all run reliably - tracking issue: #1429

Documentation, Snippets

0.7.0

Choose a tag to compare

@garrettjonesgoogle garrettjonesgoogle released this 25 Nov 01:57

Naming, interface changes

  • SPI classes ending in Api have been renamed so that they end in Client (#1417)
  • Deleted the client for Natural Language v1beta1, added the client for Natural Language v1 (#1417)
  • PubSub SPI classes now take resource name classes instead of strings (#1403)

Features

  • Speech SPI layer: AsyncRecognize now returns a new OperationFuture type which enables an easier way to get the final result of the long-running operation. (#1419)

Documentation, Snippets

0.6.0

Choose a tag to compare

@mziccard mziccard released this 15 Nov 03:00

Credentials changes

AuthCredentials classes have been deleted. Use classes from google-auth-library-java for authentication.

google-cloud will still try to infer credentials from the environment when no credentials are provided:

Storage storage = StorageOptions.getDefaultInstance().getService();

You can also explicitly provide credentials. For instance, to use a JSON credentials file try the following code:

Storage storage = StorageOptions.newBuilder()
    .setCredentials(ServiceAccountCredentials.fromStream(new FileInputStream("/path/to/my/key.json"))
    .build()
    .getService();

For more details see the Authentication section of the main README.

Features

PubSub

  • All pullAsync methods now use returnImmediately=false and are not subject to client-side timeouts (#1387)

Translate

  • Add support for the TranslateOption.model(String) option which allows to set the language translation model used to translate text. This option is only available to whitelisted users (#1393)

Fixes

Storage

  • Change BaseWriteChannel's position to long to fix integer overflow on big files (#1390)

0.5.1

Choose a tag to compare

@mziccard mziccard released this 06 Nov 19:08

Fixes

All

  • Reduce gRPC dependency footprint. In particular, some gRPC-related dependencies are removed from google-cloud-core module. Get rid of duplicate classes (#1365)

Datastore

  • Deprecate DatastoreOptions.Builder's namespace(String) setter in favor of setNamespace(String), undo deprecating Transaction.Response.getGeneratedKeys() (#1358)

  • Avoid shading javax package in google-cloud-nio shaded jar (#1362)

0.5.0

Choose a tag to compare

@mziccard mziccard released this 29 Oct 21:44

Naming changes

  • Getters and setters with the get and set prefix have been added to all classes/builders. Older getters/setters (without get/set prefix) have been deprecated
  • Builder factory methods builder() have been deprecated, you should use newBuilder() instead
  • defaultInstance() factory methods have been deprecated, you should use getDefaultInstance() instead

See the following example of using google-cloud-storage after the naming changes:

Storage storage = StorageOptions.getDefaultInstance().getService();
BlobId blobId = BlobId.of("bucket", "blob_name");
Blob blob = storage.get(blobId);
if (blob != null) {
  byte[] prevContent = blob.getContent();
  System.out.println(new String(prevContent, UTF_8));
  WritableByteChannel channel = blob.writer();
  channel.write(ByteBuffer.wrap("Updated content".getBytes(UTF_8)));
  channel.close();
}

Features

Datastore

  • Add support to LocalDatastoreHelper for more recent version of the Datastore emulator installed via gcloud (#1303)
  • Add reset() method to LocalDatastoreHelper to clear the status of the Datastore emulator (#1293)

PubSub

  • Add support for PubSub emulator host variable. If the PUBSUB_EMULATOR_HOST environment variable is set, the PubSub client uses it to locate the PubSub emulator. (#1317)

Fixes

Datastore

  • Allow LocalDatastoreHelper to properly cache downloaded copies of the Datastore emulator (#1302)

Storage

  • Fix regression in Storage.signUrl to support blob names containing / characters (#1346)
  • Allow Storage.reader to read gzip blobs in compressed chunks. This prevents ReadChannel from trying (and failing) to uncompress gzipped chunks (#1301)

Storage NIO

  • All dependencies are now shaded in the google-cloud-nio shaded jar (#1327)

0.4.0

Choose a tag to compare

@mziccard mziccard released this 29 Sep 17:27

Features

BigQuery

  • Add of(String) factory method to DatasetInfo (#1275)
bigquery.create(DatasetInfo.of("dataset-name"));

Core

  • google-cloud now depends on protobuf 3.0.0 and grpc 1.0.1 (#1273)

PubSub

  • Add support for IAM methods for sinks and subscriptions (#1231)
// Example of replacing a subscription policy
Policy policy = pubsub.getSubscriptionPolicy(subscriptionName);
Policy updatedPolicy = policy.toBuilder()
    .addIdentity(Role.viewer(), Identity.allAuthenticatedUsers())
    .build();
updatedPolicy = pubsub.replaceSubscriptionPolicy(subscriptionName, updatedPolicy);

// Example of asynchronously replacing a topic policy
Policy policy = pubsub.getTopicPolicy(topicName);
Policy updatedPolicy = policy.toBuilder()
    .addIdentity(Role.viewer(), Identity.allAuthenticatedUsers())
    .build();
Future<Policy> future = pubsub.replaceTopicPolicyAsync(topicName, updatedPolicy);
// ...
updatedPolicy = future.get();

Storage

  • Add support for create/get/update/delete/list ACLs for blobs and buckets (#1228)
// Example of updating the ACL for a blob
BlobId blobId = BlobId.of(bucketName, blobName, blobGeneration);
Acl acl = storage.updateAcl(blobId, Acl.of(User.ofAllAuthenticatedUsers(), Role.OWNER));

// Example of listing the ACL entries for a bucket
List<Acl> acls = storage.listAcls(bucketName);
for (Acl acl : acls) {
   // do something with ACL entry
}
Key key = ...;
String base64Key = ...;
byte[] content = {0xD, 0xE, 0xA, 0xD};
BlobInfo blobInfo = BlobInfo.builder(bucketName, blobName).build();

// Example of creating a blob with a customer-supplied encryption key (as Key object)
storage.create(blobInfo, content, Storage.BlobTargetOption.encryptionKey(key));

// Example of reading a blob with a customer-supplied decryption key (as base64 String)
byte[] readBytes =
    storage.readAllBytes(bucketName, blobName, Storage.BlobSourceOption.decryptionKey(base64Key));

Fixes

BigQuery

  • Support operations on tables/datasets/jobs in projects other than the one set in BigQueryOptions (#1217)
  • Allow constructing a RowToInsert using Map<Str, ? extends Object> rather than Map<Str, Object> (#1259)

Datastore

  • Retry ABORTED Datastore commits only when the commit was NON_TRANSACTIONAL (#1235)

Logging

  • Remove unnecessary MetricInfo parameter from Metric.updateAsync() (#1221)
  • Remove unnecessary SinkInfo parameter from Sink.updateAsync() (#1222)
  • Logging.deleteSink now returns false on NOT_FOUND (#1222)

Storage

  • Retry calls that open a resumable upload session in WriteChannel, when they fail with a retryable error (#1233)
  • Fix generation of signed URLs for blobs containing spaces and other special chars (#1277 - thanks to @ostronom)

0.3.0

Choose a tag to compare

@mziccard mziccard released this 31 Aug 13:23

gcloud-java renamed to google-cloud

gcloud-java has been deprecated and renamed to google-cloud.

If you are using Maven, add this to your pom.xml file

<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>google-cloud</artifactId>
  <version>0.3.0</version>
</dependency>

If you are using Gradle, add this to your dependencies

compile 'com.google.cloud:google-cloud:0.3.0'

If you are using SBT, add this to your dependencies

libraryDependencies += "com.google.cloud" % "google-cloud" % "0.3.0"

gcloud-java-<service> renamed to google-cloud-<service>

Service-specific artifacts have also been renamed from gcloud-java-<service> to google-cloud-<service>. See the following for examples of adding google-cloud-datastore as a dependency:

<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>google-cloud-datastore</artifactId>
  <version>0.3.0</version>
</dependency>

If you are using Gradle, add this to your dependencies

compile 'com.google.cloud:google-cloud-datastore:0.3.0'

If you are using SBT, add this to your dependencies

libraryDependencies += "com.google.cloud" % "google-cloud-datastore" % "0.3.0"

Other changes

0.2.8

Choose a tag to compare

@mziccard mziccard released this 25 Aug 18:31

Features

Datastore

  • gcloud-java-datastore now uses Datastore v1 (#1169)

Translate

  • gcloud-java-translate, a new client library to interact with Google Translate, is released and is in alpha. See the docs for more information.
    See TranslateExample for a complete example or API Documentation for gcloud-java-translate javadoc.
    The following snippet shows how to detect the language of some text and how to translate some text.
    Complete source code can be found on
    DetectLanguageAndTranslate.java.
import com.google.cloud.translate.Detection;
import com.google.cloud.translate.Translate;
import com.google.cloud.translate.Translate.TranslateOption;
import com.google.cloud.translate.TranslateOptions;
import com.google.cloud.translate.Translation;

Translate translate = TranslateOptions.defaultInstance().service();

Detection detection = translate.detect("Hola");
String detectedLanguage = detection.language();

Translation translation = translate.translate(
    "World",
    TranslateOption.sourceLanguage("en"),
    TranslateOption.targetLanguage(detectedLanguage));

System.out.printf("Hola %s%n", translation.translatedText());

Fixes

Core

  • SocketException and "insufficient data written" IOException are now retried (#1187)

Storage NIO

  • Enumerating filesystems no longer fails if gcloud-java-nio is in the classpath and no credentials are available (#1189)
  • Rename CloudStorageFileSystemProvider.setGCloudOptions to CloudStorageFileSystemProvider.setStorageOptions (#1189)

0.2.7

Choose a tag to compare

@mziccard mziccard released this 11 Aug 13:54

Fixes

BigQuery

  • String setters for DeprecationStatus timestamps are removed from DeprecationStatus.Builder. Getters are still available in DeprecationStatus for legacy support (#1127).
  • Fix table's StreamingBuffer to allow oldestEntryTime to be null (#1141).
  • Add support for useLegacySql to QueryRequest and QueryJobConfiguration (#1142).

Datastore

  • Fix Datastore exceptions conversion: use getNumber() instead of ordinal() to get DatastoreException's error code (#1140).
  • Use HTTP transport factory, as set via DatastoreOptions, to perform service requests (#1144).

Logging

  • Set gcloud-java user agent in gcloud-java-logging, as done for other modules (#1147).

PubSub

  • Change Pub/Sub endpoint from pubsub-experimental.googleapis.com to pubsub.googleapis.com (#1149).

0.2.6

Choose a tag to compare

@mziccard mziccard released this 21 Jul 18:07

Features

BigQuery

  • Add support for time-partitioned tables. For example, you can now create a time partitioned table using the following code:
TableId tableId = TableId.of(datasetName, tableName);
TimePartitioning partitioning = TimePartitioning.of(Type.DAY);
// You can also set the expiration
// TimePartitioning partitioning = TimePartitioning.of(Type.DAY, 2592000000);
StandardTableDefinition tableDefinition = StandardTableDefinition.builder()
    .schema(tableSchema)
    .timePartitioning(partitioning)
    .build();
Table createdTable = bigquery.create(TableInfo.of(tableId, tableDefinition));

Logging

  • gcloud-java-logging, a new client library to interact with Stackdriver Logging, is released and is in alpha. See the docs for more information.
    gcloud-java-logging uses gRPC as transport layer, which is not (yet) supported by App Engine Standard. gcloud-java-logging will work on App Engine Flexible.
    See LoggingExample for a complete example or API Documentation for gcloud-java-logging javadoc.
    The following snippet shows how to write and list log entries. Complete source code can be found on
    WriteAndListLogEntries.java.
import com.google.cloud.MonitoredResource;
import com.google.cloud.Page;
import com.google.cloud.logging.LogEntry;
import com.google.cloud.logging.Logging;
import com.google.cloud.logging.Logging.EntryListOption;
import com.google.cloud.logging.LoggingOptions;
import com.google.cloud.logging.Payload.StringPayload;

import java.util.Collections;
import java.util.Iterator;

LoggingOptions options = LoggingOptions.defaultInstance();
try(Logging logging = options.service()) {

  LogEntry firstEntry = LogEntry.builder(StringPayload.of("message"))
      .logName("test-log")
      .resource(MonitoredResource.builder("global")
          .addLabel("project_id", options.projectId())
          .build())
      .build();
  logging.write(Collections.singleton(firstEntry));

  Page<LogEntry> entries = logging.listLogEntries(
      EntryListOption.filter("logName=projects/" + options.projectId() + "/logs/test-log"));
  Iterator<LogEntry> entryIterator = entries.iterateAll();
  while (entryIterator.hasNext()) {
    System.out.println(entryIterator.next());
  }
}

The following snippet, instead, shows how to use a java.util.logging.Logger to write log entries to Stackdriver Logging. The snippet installs a Stackdriver Logging handler using
LoggingHandler.addHandler(Logger, LoggingHandler). Notice that this could also be done through the logging.properties file, adding the following line:

com.google.cloud.examples.logging.snippets.AddLoggingHandler.handlers=com.google.cloud.logging.LoggingHandler}

The complete code can be found on AddLoggingHandler.java.

import com.google.cloud.logging.LoggingHandler;

import java.util.logging.Logger;

Logger logger = Logger.getLogger(AddLoggingHandler.class.getName());
LoggingHandler.addHandler(logger, new LoggingHandler());
logger.warning("test warning");