Skip to content

Commit 052ce9e

Browse files
authored
Merge pull request #28 from Worklytics/s174-new-datastore-lib
S174 : new datastore lib
2 parents 6e49c48 + d3993c6 commit 052ce9e

File tree

63 files changed

+2944
-1390
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+2944
-1390
lines changed

.github/workflows/test-java.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
java-version: 17
1515
distribution: 'adopt'
1616
- name: Install pipelines-jar
17-
run: mvn install:install-file -Dfile=java/lib/pipeline.jar -DgroupId=com.google.appengine.tools -DartifactId=appengine-pipeline -Dversion=0.3+worklytics.3 -Dpackaging=jar
17+
run: mvn install:install-file -Dfile=java/lib/pipeline.jar -DgroupId=com.google.appengine.tools -DartifactId=appengine-pipeline -Dversion=0.3+worklytics.4 -Dpackaging=jar
1818
# init maven settings such maven can consume packages from GitHub, not just maven central
1919
- uses: s4u/[email protected]
2020
with:

java/example/src/com/google/appengine/demos/mapreduce/randomcollisions/CollisionFindingServlet.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@
2727
import java.util.ArrayList;
2828
import java.util.logging.Logger;
2929

30-
import javax.servlet.http.HttpServlet;
31-
import javax.servlet.http.HttpServletRequest;
32-
import javax.servlet.http.HttpServletResponse;
30+
import jakarta.servlet.http.HttpServlet;
31+
import jakarta.servlet.http.HttpServletRequest;
32+
import jakarta.servlet.http.HttpServletResponse;
3333

3434
/**
3535
* This is an example Map Reduce that demos parallel computation.

java/example/src/com/google/appengine/demos/mapreduce/randomcollisions/UsingPipelineServlet.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424
import java.util.ArrayList;
2525
import java.util.logging.Logger;
2626

27-
import javax.servlet.http.HttpServlet;
28-
import javax.servlet.http.HttpServletRequest;
29-
import javax.servlet.http.HttpServletResponse;
27+
import jakarta.servlet.http.HttpServlet;
28+
import jakarta.servlet.http.HttpServletRequest;
29+
import jakarta.servlet.http.HttpServletResponse;
3030

3131
/**
3232
* This is an alternative to {@link CollisionFindingServlet} that uses Pipelines to start the
-230 KB
Binary file not shown.
293 KB
Binary file not shown.

java/lib/pipeline.jar

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
appengine-pipeline-0.3+worklytics.3.jar
1+
appengine-pipeline-0.3+worklytics.4.jar

java/pom.xml

Lines changed: 47 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -33,34 +33,16 @@
3333
<appengine.target.version>[2.0.4, 2.0.23)</appengine.target.version>
3434
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3535
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
36-
<github.global.server>github</github.global.server>
3736
<jackson.version>[2.7,3.0)</jackson.version> <!-- 2.7+ is needed for JDK8 data type serialization -->
38-
<google.http.client.version>1.44.1</google.http.client.version>
37+
<google.http.client.version>[1.43, 2.0)</google.http.client.version>
3938
</properties>
40-
<repositories>
41-
<repository>
42-
<id>github</id>
43-
<name>Apache Maven Packages by Worklytics</name>
44-
<!-- /packages portion is magic, not documented directly anywhere; docs suggest to put a specific repoId, which
45-
seems weird as we want to make ALL packages published under Worklytics organization available to maven -->
46-
<url>https://maven.pkg.github.com/worklytics/packages</url>
47-
</repository>
48-
</repositories>
49-
50-
<distributionManagement>
51-
<repository>
52-
<id>github</id>
53-
<name>Mapreduce for Google App Engine by Worklytics</name>
54-
<url>https://maven.pkg.github.com/Worklytics/appengine-mapreduce</url>
55-
</repository>
56-
</distributionManagement>
5739

5840
<dependencyManagement>
5941
<dependencies>
6042
<dependency>
6143
<groupId>com.google.cloud</groupId>
6244
<artifactId>libraries-bom</artifactId>
63-
<version>5.1.0</version>
45+
<version>26.27.0</version>
6446
<type>pom</type>
6547
<scope>import</scope>
6648
</dependency>
@@ -86,6 +68,16 @@
8668
<target>17</target>
8769
</configuration>
8870
</plugin>
71+
<plugin>
72+
<groupId>org.apache.maven.plugins</groupId>
73+
<artifactId>maven-surefire-plugin</artifactId>
74+
<configuration>
75+
<environmentVariables>
76+
<!-- allows DatastoreOptions.getDefaultInstance() to work in tests -->
77+
<GOOGLE_CLOUD_PROJECT>test-project</GOOGLE_CLOUD_PROJECT>
78+
</environmentVariables>
79+
</configuration>
80+
</plugin>
8981
<plugin>
9082
<groupId>org.apache.maven.plugins</groupId>
9183
<artifactId>maven-jar-plugin</artifactId>
@@ -154,10 +146,14 @@
154146
</exclusion>
155147
</exclusions>
156148
</dependency>
149+
<dependency>
150+
<groupId>com.google.cloud</groupId>
151+
<artifactId>google-cloud-datastore</artifactId>
152+
</dependency>
157153
<dependency>
158154
<groupId>com.google.appengine.tools</groupId>
159155
<artifactId>appengine-pipeline</artifactId>
160-
<version>0.3+worklytics.3</version>
156+
<version>0.3+worklytics.4</version>
161157
</dependency>
162158
<dependency>
163159
<groupId>com.googlecode.charts4j</groupId>
@@ -172,7 +168,7 @@
172168
<dependency>
173169
<groupId>com.google.protobuf</groupId>
174170
<artifactId>protobuf-java</artifactId>
175-
<version>3.16.3</version>
171+
<version>3.24.4</version>
176172
</dependency>
177173
<dependency>
178174
<groupId>com.google.guava</groupId>
@@ -192,7 +188,7 @@
192188
<dependency>
193189
<groupId>com.google.api-client</groupId>
194190
<artifactId>google-api-client</artifactId>
195-
<version>[1.25,2.0)</version>
191+
<version>[2.0,3.0)</version>
196192
<exclusions>
197193
<exclusion>
198194
<groupId>com.google.guava</groupId>
@@ -203,7 +199,7 @@
203199
<dependency>
204200
<groupId>com.google.api-client</groupId>
205201
<artifactId>google-api-client-appengine</artifactId>
206-
<version>[1.25,2.0)</version>
202+
<version>[2.0,3.0)</version>
207203
<exclusions>
208204
<exclusion>
209205
<groupId>com.google.guava</groupId>
@@ -248,6 +244,28 @@
248244
<artifactId>guava-retrying</artifactId>
249245
<version>2.0.0</version>
250246
</dependency>
247+
<dependency>
248+
<groupId>jakarta.servlet</groupId>
249+
<artifactId>jakarta.servlet-api</artifactId>
250+
<version>6.0.0</version>
251+
<scope>provided</scope> <!-- if deploying to GAE standard with legacy apis enabled -->
252+
</dependency>
253+
254+
<!-- Dagger - Dependency Inject FW - https://github.com/google/dagger -->
255+
<!-- TBC: if micronaut, that provides compile-time DI too ... -->
256+
<!-- also, is this very extensible? believe this will in effect require users to provide Dagger 2 module FQN to @Injectable to leverage this -->
257+
<dependency>
258+
<groupId>com.google.dagger</groupId>
259+
<artifactId>dagger</artifactId>
260+
<version>2.51.1</version>
261+
<scope>compile</scope>
262+
</dependency>
263+
<dependency>
264+
<groupId>com.google.dagger</groupId>
265+
<artifactId>dagger-compiler</artifactId>
266+
<version>2.51.1</version>
267+
<scope>compile</scope>
268+
</dependency>
251269

252270
<!-- Test Dependencies -->
253271
<dependency>
@@ -284,6 +302,11 @@
284302
<artifactId>junit-jupiter-engine</artifactId>
285303
<scope>test</scope>
286304
</dependency>
305+
<dependency>
306+
<groupId>org.junit.jupiter</groupId>
307+
<artifactId>junit-jupiter-params</artifactId>
308+
<scope>test</scope>
309+
</dependency>
287310
<dependency>
288311
<groupId>org.easymock</groupId>
289312
<artifactId>easymock</artifactId>

java/src/main/java/com/google/appengine/tools/mapreduce/MapJob.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.google.appengine.tools.mapreduce.impl.pipeline.ExamineStatusAndReturnResult;
1111
import com.google.appengine.tools.mapreduce.impl.pipeline.ResultAndStatus;
1212
import com.google.appengine.tools.mapreduce.impl.pipeline.ShardedJob;
13+
import com.google.appengine.tools.mapreduce.impl.shardedjob.ShardedJobService;
1314
import com.google.appengine.tools.mapreduce.impl.shardedjob.ShardedJobServiceFactory;
1415
import com.google.appengine.tools.mapreduce.impl.shardedjob.ShardedJobSettings;
1516
import com.google.appengine.tools.pipeline.FutureValue;
@@ -19,10 +20,13 @@
1920
import com.google.appengine.tools.pipeline.PipelineServiceFactory;
2021
import com.google.appengine.tools.pipeline.PromisedValue;
2122
import com.google.appengine.tools.pipeline.Value;
23+
import com.google.cloud.datastore.Datastore;
24+
import com.google.cloud.datastore.DatastoreOptions;
2225
import com.google.common.base.Optional;
2326
import com.google.common.base.Preconditions;
2427
import com.google.common.collect.ImmutableList;
2528

29+
import javax.inject.Inject;
2630
import java.io.IOException;
2731
import java.util.List;
2832
import java.util.concurrent.CancellationException;
@@ -50,6 +54,10 @@ public MapJob(MapSpecification<I, O, R> specification, MapSettings settings) {
5054
this.settings = settings;
5155
}
5256

57+
@Inject
58+
transient ShardedJobService shardedJobService;
59+
60+
5361
public static final String DEFAULT_QUEUE_NAME = "default";
5462

5563
/**
@@ -76,7 +84,12 @@ public Value<MapReduceResult<R>> run() {
7684
+ " job, using 'default'");
7785
queue = DEFAULT_QUEUE_NAME;
7886
}
79-
settings = new MapReduceSettings.Builder().setWorkerQueueName(queue).build();
87+
settings = new MapReduceSettings.Builder()
88+
.setProjectId(settings.getProjectId())
89+
.setDatabaseId(settings.getDatabaseId())
90+
.setNamespace(settings.getNamespace())
91+
.setWorkerQueueName(queue)
92+
.build();
8093
}
8194
String jobId = getJobKey().getName();
8295
Context context = new BaseContext(jobId);
@@ -104,7 +117,7 @@ public Value<MapReduceResult<R>> run() {
104117
WorkerController<I, O, R, MapOnlyMapperContext<O>> workerController = new WorkerController<>(
105118
jobId, new CountersImpl(), output, resultAndStatus.getHandle());
106119
ShardedJob<?> shardedJob =
107-
new ShardedJob<>(jobId, mapTasks.build(), workerController, shardedJobSettings);
120+
new ShardedJob<>(settings.getDatastoreOptions(), jobId, mapTasks.build(), workerController, shardedJobSettings);
108121
FutureValue<Void> shardedJobResult = futureCall(shardedJob, settings.toJobSettings());
109122
JobSetting[] jobSetting = settings.toJobSettings(waitFor(shardedJobResult),
110123
statusConsoleUrl(shardedJobSettings.getMapReduceStatusUrl()), maxAttempts(1));
@@ -116,7 +129,9 @@ public Value<MapReduceResult<R>> run() {
116129
*/
117130
public Value<MapReduceResult<R>> handleException(CancellationException ex) {
118131
String mrJobId = getJobKey().getName();
119-
ShardedJobServiceFactory.getShardedJobService().abortJob(mrJobId);
132+
Datastore datastore = DatastoreOptions.getDefaultInstance().toBuilder()
133+
.setNamespace(settings.getNamespace()).build().getService();
134+
shardedJobService.abortJob(datastore, mrJobId);
120135
return null;
121136
}
122137

0 commit comments

Comments
 (0)