Skip to content

Commit 44f2b5c

Browse files
ludochgae-java-bot
authored andcommitted
Update Datastore client dependencies and host override logic. Needed as the old deprecated method has now been removed.
PiperOrigin-RevId: 918562515 Change-Id: I596dfa2a59f6cf24d861a71e3b2c2f52ed604ef7
1 parent c32e3b8 commit 44f2b5c

3 files changed

Lines changed: 58 additions & 56 deletions

File tree

api/src/main/java/com/google/appengine/api/datastore/CloudDatastoreV1ClientImpl.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,8 @@ private static Credential getCredential() throws GeneralSecurityException, IOExc
255255
if (privateKeyFile != null) {
256256
logger.log(
257257
Level.INFO,
258-
"Service account and private key file were provided. Using service account credential.");
258+
"Service account and private key file were provided. Using service account"
259+
+ " credential.");
259260
return getServiceAccountCredentialBuilder(serviceAccount)
260261
.setServiceAccountPrivateKeyFromP12File(new File(privateKeyFile))
261262
.build();
@@ -291,22 +292,22 @@ private static Credential getCredential() throws GeneralSecurityException, IOExc
291292
}
292293

293294
private static void setProjectEndpoint(String projectId, DatastoreOptions.Builder options) {
294-
if (DatastoreServiceGlobalConfig.getConfig().hostOverride() != null) {
295-
options.projectEndpoint(
296-
String.format(
297-
"%s/%s/projects/%s",
298-
DatastoreServiceGlobalConfig.getConfig().hostOverride(),
299-
DatastoreFactory.VERSION.toLowerCase(),
300-
projectId));
295+
options.projectId(projectId);
296+
String hostOverride = DatastoreServiceGlobalConfig.getConfig().hostOverride();
297+
if (hostOverride != null) {
298+
if (hostOverride.startsWith("http://")) {
299+
options.localHost(hostOverride.substring("http://".length()));
300+
} else if (hostOverride.startsWith("https://")) {
301+
options.host(hostOverride.substring("https://".length()));
302+
} else {
303+
options.host(hostOverride);
304+
}
301305
return;
302306
}
303307
if (DatastoreServiceGlobalConfig.getConfig().emulatorHost() != null) {
304-
options.projectId(projectId);
305308
options.localHost(DatastoreServiceGlobalConfig.getConfig().emulatorHost());
306309
return;
307310
}
308-
options.projectId(projectId);
309-
return;
310311
}
311312

312313
private static GoogleCredential.Builder getServiceAccountCredentialBuilder(String account)

api_dev/src/test/java/com/google/appengine/api/datastore/QueryResultsSourceImplTest.java

Lines changed: 42 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -21,51 +21,57 @@
2121
import static com.google.appengine.api.datastore.FetchOptions.Builder.withDefaults;
2222
import static com.google.appengine.api.datastore.FetchOptions.Builder.withLimit;
2323
import static com.google.common.truth.Truth.assertThat;
24-
import static org.mockito.ArgumentMatchers.eq;
25-
import static org.mockito.Mockito.anyString;
26-
import static org.mockito.Mockito.reset;
27-
import static org.mockito.Mockito.times;
28-
import static org.mockito.Mockito.verify;
29-
import static org.mockito.Mockito.verifyNoMoreInteractions;
3024

3125
import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig;
3226
import com.google.appengine.tools.development.testing.LocalServiceTestHelper;
3327
import java.util.ArrayList;
3428
import java.util.List;
3529
import java.util.function.Consumer;
30+
import java.util.logging.Handler;
3631
import java.util.logging.Level;
37-
import java.util.logging.Logger;
32+
import java.util.logging.LogRecord;
3833
import org.junit.After;
3934
import org.junit.Before;
40-
import org.junit.Rule;
4135
import org.junit.Test;
4236
import org.junit.runner.RunWith;
4337
import org.junit.runners.JUnit4;
44-
import org.mockito.Mock;
45-
import org.mockito.junit.MockitoJUnit;
46-
import org.mockito.junit.MockitoRule;
4738

4839
@RunWith(JUnit4.class)
4940
public class QueryResultsSourceImplTest {
50-
@Rule public MockitoRule mockitoRule = MockitoJUnit.rule();
51-
5241
private final LocalServiceTestHelper helper =
5342
new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig());
5443

55-
@Mock Logger mockLogger;
44+
private final AssertingHandler assertingHandler = new AssertingHandler();
5645

5746
@Before
5847
public void setUp() throws Exception {
5948
helper.setUp();
6049
lastChunkSizeWarning.set(0);
50+
BaseQueryResultsSource.logger.addHandler(assertingHandler);
6151
}
6252

6353
@After
6454
public void tearDown() {
55+
BaseQueryResultsSource.logger.removeHandler(assertingHandler);
6556
lastChunkSizeWarning.set(0);
6657
helper.tearDown();
6758
}
6859

60+
private static class AssertingHandler extends Handler {
61+
private final List<LogRecord> records = new ArrayList<>();
62+
63+
@Override
64+
public void publish(LogRecord record) {
65+
records.add(record);
66+
}
67+
68+
@Override
69+
public void flush() {}
70+
71+
@Override
72+
public void close() {}
73+
}
74+
6975
private void addData(int count) {
7076
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
7177
List<Entity> toPut = new ArrayList<>();
@@ -88,40 +94,35 @@ private static Iterable<Entity> asList(PreparedQuery query, FetchOptions opts) {
8894
}
8995

9096
private void doQueries(ResultIterableProvider provider) {
91-
Logger original = BaseQueryResultsSource.logger;
92-
BaseQueryResultsSource.logger = mockLogger;
93-
try {
94-
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
95-
Query query = new Query("foo");
96-
// This won't trigger the warning because we're not pulling back enough.
97-
for (@SuppressWarnings("unused")
98-
Entity e : provider.asIterable(datastore.prepare(query), withLimit(1000))) {}
99-
// This won't trigger the warning because we're setting an explicit chunk size.
100-
for (@SuppressWarnings("unused")
101-
Entity e : provider.asIterable(datastore.prepare(query), withChunkSize(21))) {}
102-
// This will trigger the warning.
103-
for (@SuppressWarnings("unused")
104-
Entity e : provider.asIterable(datastore.prepare(query), withDefaults())) {}
105-
// Do it again - we shouldn't log a second time because we only log every
106-
// 5 minutes.
107-
for (@SuppressWarnings("unused")
108-
Entity e : provider.asIterable(datastore.prepare(query), withDefaults())) {}
109-
} finally {
110-
BaseQueryResultsSource.logger = original;
111-
}
97+
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
98+
Query query = new Query("foo");
99+
// This won't trigger the warning because we're not pulling back enough.
100+
for (@SuppressWarnings("unused")
101+
Entity e : provider.asIterable(datastore.prepare(query), withLimit(1000))) {}
102+
// This won't trigger the warning because we're setting an explicit chunk size.
103+
for (@SuppressWarnings("unused")
104+
Entity e : provider.asIterable(datastore.prepare(query), withChunkSize(21))) {}
105+
// This will trigger the warning.
106+
for (@SuppressWarnings("unused")
107+
Entity e : provider.asIterable(datastore.prepare(query), withDefaults())) {}
108+
// Do it again - we shouldn't log a second time because we only log every
109+
// 5 minutes.
110+
for (@SuppressWarnings("unused")
111+
Entity e : provider.asIterable(datastore.prepare(query), withDefaults())) {}
112112
}
113113

114114
@Test
115115
public void testLogChunkSizeWarning() {
116116
Consumer<ResultIterableProvider> test =
117117
provider -> {
118118
doQueries(provider);
119-
verify(mockLogger).warning(anyString());
120119
assertThat(lastChunkSizeWarning.get()).isGreaterThan(0);
120+
assertThat(assertingHandler.records).isNotEmpty();
121+
assertThat(assertingHandler.records.get(0).getLevel()).isEqualTo(Level.WARNING);
121122
};
122123
addData(1001);
123124
test.accept(QueryResultsSourceImplTest::asIterable);
124-
reset(mockLogger);
125+
assertingHandler.records.clear();
125126
lastChunkSizeWarning.set(0);
126127
test.accept(QueryResultsSourceImplTest::asList);
127128
}
@@ -135,12 +136,12 @@ public void testLogChunkSizeWarning_After5Minutes() {
135136
lastChunkSizeWarning.set(lastChunkSizeWarning.get() - (1000 * 60 * 10));
136137
// Run again, we'll get one more log warning
137138
doQueries(provider);
138-
verify(mockLogger, times(2)).warning(anyString());
139+
assertThat(assertingHandler.records).hasSize(2);
139140
assertThat(lastChunkSizeWarning.get()).isGreaterThan(0);
140141
};
141142
addData(1001);
142143
test.accept(QueryResultsSourceImplTest::asIterable);
143-
reset(mockLogger);
144+
assertingHandler.records.clear();
144145
lastChunkSizeWarning.set(0);
145146
test.accept(QueryResultsSourceImplTest::asList);
146147
}
@@ -156,11 +157,11 @@ public void testLogChunkSizeWarning_LoggingDisabled() {
156157
System.clearProperty("appengine.datastore.disableChunkSizeWarning");
157158
}
158159
assertThat(lastChunkSizeWarning.get()).isEqualTo(0);
159-
verifyNoMoreInteractions(mockLogger);
160+
assertThat(assertingHandler.records).isEmpty();
160161
};
161162
addData(1001);
162163
test.accept(QueryResultsSourceImplTest::asIterable);
163-
reset(mockLogger);
164+
assertingHandler.records.clear();
164165
lastChunkSizeWarning.set(0);
165166
test.accept(QueryResultsSourceImplTest::asList);
166167
}

pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
<jetty.version>9.4.58.v20250814</jetty.version>
7070
<jetty12.version>12.0.35</jetty12.version>
7171
<jetty121.version>12.1.9</jetty121.version>
72-
<slf4j.version>2.0.17</slf4j.version>
72+
<slf4j.version>2.0.18</slf4j.version>
7373
<protoc.version>4.34.1</protoc.version>
7474
<auto-service.version>1.1.1</auto-service.version>
7575
<auto-value.version>1.11.1</auto-value.version>
@@ -437,7 +437,7 @@
437437
<dependency>
438438
<groupId>com.google.cloud.datastore</groupId>
439439
<artifactId>datastore-v1-proto-client</artifactId>
440-
<version>2.33.1</version>
440+
<version>2.41.0</version>
441441
</dependency>
442442
<dependency>
443443
<groupId>com.google.geometry</groupId>
@@ -500,12 +500,12 @@
500500
<dependency>
501501
<groupId>com.google.api.grpc</groupId>
502502
<artifactId>proto-google-cloud-datastore-v1</artifactId>
503-
<version>0.128.0</version>
503+
<version>0.133.0</version>
504504
</dependency>
505505
<dependency>
506506
<groupId>com.google.api.grpc</groupId>
507507
<artifactId>proto-google-common-protos</artifactId>
508-
<version>2.67.0</version>
508+
<version>2.71.0</version>
509509
</dependency>
510510
<dependency>
511511
<groupId>com.google.code.findbugs</groupId>

0 commit comments

Comments
 (0)