Skip to content

Commit 30c5ca6

Browse files
author
Ajay Kannan
committed
---
yaml --- r: 1701 b: refs/heads/master c: 1f6a7b3 h: refs/heads/master i: 1699: d783ee2
1 parent cd79612 commit 30c5ca6

7 files changed

Lines changed: 65 additions & 17 deletions

File tree

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 1dd2c04a45d1181de57e9efeeecef4e4f8c97c0f
2+
refs/heads/master: 1f6a7b3f07fbfb8f9cfdfb7cc83c13f32577c1f4
33
refs/heads/travis: e21ee7b88a5edc3f3d8c71f90c3fc32abf7e8dd6
44
refs/heads/gh-pages: d1b373c30c176edc08692348167bec3a244bb823
55
refs/heads/bigquery: 762fa5830e6c398c0396177e3e7fd243bd62cfc3

trunk/gcloud-java-datastore/src/test/java/com/google/gcloud/datastore/DatastoreTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ public void testQueryPaginationWithLimit() throws DatastoreException {
473473
.andReturn(rpcMock);
474474
List<RunQueryResponse> responses = buildResponsesForQueryPaginationWithLimit();
475475
List<ByteString> endCursors = Lists.newArrayListWithCapacity(responses.size());
476-
for (RunQueryResponse response : responses) {
476+
for (RunQueryResponse response: responses) {
477477
EasyMock.expect(rpcMock.runQuery(EasyMock.anyObject(RunQueryRequest.class)))
478478
.andReturn(response);
479479
if (response.getBatch().getMoreResults() != QueryResultBatch.MoreResultsType.NOT_FINISHED) {

trunk/gcloud-java-resourcemanager/src/main/java/com/google/gcloud/resourcemanager/ResourceManager.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,6 @@ public static ProjectListOption pageToken(String pageToken) {
147147
*
148148
* <p>The server can return fewer projects than requested. When there are more results than the
149149
* page size, the server will return a page token that can be used to fetch other results.
150-
* Note: pagination is not yet supported; the server currently ignores this field and returns
151-
* all results.
152150
*/
153151
public static ProjectListOption pageSize(int pageSize) {
154152
return new ProjectListOption(ResourceManagerRpc.Option.PAGE_SIZE, pageSize);
@@ -228,8 +226,7 @@ public static ProjectListOption fields(ProjectField... fields) {
228226
*
229227
* <p>This method returns projects in an unspecified order. New projects do not necessarily appear
230228
* at the end of the list. Use {@link ProjectListOption} to filter this list, set page size, and
231-
* set page tokens. Note that pagination is currently not implemented by the Cloud Resource
232-
* Manager API.
229+
* set page tokens.
233230
*
234231
* @see <a
235232
* href="https://cloud.google.com/resource-manager/reference/rest/v1beta1/projects/list">Cloud

trunk/gcloud-java-resourcemanager/src/main/java/com/google/gcloud/resourcemanager/testing/LocalResourceManagerHelper.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
import java.util.Map;
3535
import java.util.Random;
3636
import java.util.Set;
37-
import java.util.concurrent.ConcurrentHashMap;
37+
import java.util.concurrent.ConcurrentSkipListMap;
3838
import java.util.logging.Level;
3939
import java.util.logging.Logger;
4040
import java.util.zip.GZIPInputStream;
@@ -71,7 +71,7 @@ public class LocalResourceManagerHelper {
7171
ImmutableSet.of('-', '\'', '"', ' ', '!');
7272

7373
private final HttpServer server;
74-
private final ConcurrentHashMap<String, Project> projects = new ConcurrentHashMap<>();
74+
private final ConcurrentSkipListMap<String, Project> projects = new ConcurrentSkipListMap<>();
7575
private final int port;
7676

7777
private static class Response {
@@ -245,10 +245,10 @@ private static Map<String, Object> parseListOptions(String query) {
245245
options.put("filter", argEntry[1].split(" "));
246246
break;
247247
case "pageToken":
248-
// support pageToken when Cloud Resource Manager supports this (#421)
248+
options.put("pageToken", argEntry[1]);
249249
break;
250250
case "pageSize":
251-
// support pageSize when Cloud Resource Manager supports this (#421)
251+
options.put("pageSize", Integer.parseInt(argEntry[1]));
252252
break;
253253
}
254254
}
@@ -353,16 +353,27 @@ Response get(String projectId, String[] fields) {
353353
}
354354

355355
Response list(Map<String, Object> options) {
356-
// Use pageSize and pageToken options when Cloud Resource Manager does so (#421)
357356
List<String> projectsSerialized = new ArrayList<>();
358357
String[] filters = (String[]) options.get("filter");
359358
if (filters != null && !isValidFilter(filters)) {
360359
return Error.INVALID_ARGUMENT.response("Could not parse the filter.");
361360
}
362361
String[] fields = (String[]) options.get("fields");
362+
int count = 0;
363+
String pageToken = (String) options.get("pageToken");
364+
Integer pageSize = (Integer) options.get("pageSize");
365+
String nextPageToken = null;
363366
for (Project p : projects.values()) {
367+
if (pageToken != null && p.getProjectId().compareTo(pageToken) < 0) {
368+
continue;
369+
}
370+
if (pageSize != null && count >= pageSize) {
371+
nextPageToken = p.getProjectId();
372+
break;
373+
}
364374
boolean includeProject = includeProject(p, filters);
365375
if (includeProject) {
376+
count++;
366377
try {
367378
projectsSerialized.add(jsonFactory.toString(extractFields(p, fields)));
368379
} catch (IOException e) {
@@ -374,7 +385,11 @@ Response list(Map<String, Object> options) {
374385
StringBuilder responseBody = new StringBuilder();
375386
responseBody.append("{\"projects\": [");
376387
Joiner.on(",").appendTo(responseBody, projectsSerialized);
377-
responseBody.append("]}");
388+
responseBody.append("]");
389+
if (nextPageToken != null) {
390+
responseBody.append(", \"nextPageToken\": \"" + nextPageToken + "\"");
391+
}
392+
responseBody.append("}");
378393
return new Response(HTTP_OK, responseBody.toString());
379394
}
380395

trunk/gcloud-java-resourcemanager/src/test/java/com/google/gcloud/resourcemanager/LocalResourceManagerHelperTest.java

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.junit.Test;
2020

2121
import java.util.HashMap;
22+
import java.util.Iterator;
2223
import java.util.Map;
2324

2425
public class LocalResourceManagerHelperTest {
@@ -278,7 +279,7 @@ public void testGetWithOptions() {
278279
public void testList() {
279280
Tuple<String, Iterable<com.google.api.services.cloudresourcemanager.model.Project>> projects =
280281
rpc.list(EMPTY_RPC_OPTIONS);
281-
assertNull(projects.x()); // change this when #421 is resolved
282+
assertNull(projects.x());
282283
assertFalse(projects.y().iterator().hasNext());
283284
rpc.create(COMPLETE_PROJECT);
284285
RESOURCE_MANAGER_HELPER.changeLifecycleState(
@@ -296,12 +297,31 @@ public void testList() {
296297
}
297298
}
298299

300+
@Test
301+
public void testListPaging() {
302+
Map<ResourceManagerRpc.Option, Object> rpcOptions = new HashMap<>();
303+
rpcOptions.put(ResourceManagerRpc.Option.PAGE_SIZE, 1);
304+
rpc.create(PARTIAL_PROJECT);
305+
rpc.create(COMPLETE_PROJECT);
306+
Tuple<String, Iterable<com.google.api.services.cloudresourcemanager.model.Project>> projects =
307+
rpc.list(rpcOptions);
308+
assertNotNull(projects.x());
309+
Iterator<com.google.api.services.cloudresourcemanager.model.Project> iterator =
310+
projects.y().iterator();
311+
compareReadWriteFields(COMPLETE_PROJECT, iterator.next());
312+
assertFalse(iterator.hasNext());
313+
rpcOptions = new HashMap<>();
314+
rpcOptions.put(ResourceManagerRpc.Option.PAGE_TOKEN, projects.x());
315+
projects = rpc.list(rpcOptions);
316+
iterator = projects.y().iterator();
317+
compareReadWriteFields(PARTIAL_PROJECT, iterator.next());
318+
assertFalse(iterator.hasNext());
319+
}
320+
299321
@Test
300322
public void testListFieldOptions() {
301323
Map<ResourceManagerRpc.Option, Object> rpcOptions = new HashMap<>();
302324
rpcOptions.put(ResourceManagerRpc.Option.FIELDS, "projects(projectId,name,labels)");
303-
rpcOptions.put(ResourceManagerRpc.Option.PAGE_TOKEN, "somePageToken");
304-
rpcOptions.put(ResourceManagerRpc.Option.PAGE_SIZE, 1);
305325
rpc.create(PROJECT_WITH_PARENT);
306326
Tuple<String, Iterable<com.google.api.services.cloudresourcemanager.model.Project>> projects =
307327
rpc.list(rpcOptions);

trunk/gcloud-java-resourcemanager/src/test/java/com/google/gcloud/resourcemanager/ResourceManagerImplTest.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.junit.Test;
4343
import org.junit.rules.ExpectedException;
4444

45+
import java.util.Iterator;
4546
import java.util.Map;
4647

4748
public class ResourceManagerImplTest {
@@ -166,7 +167,7 @@ public void testGetWithOptions() {
166167
@Test
167168
public void testList() {
168169
Page<Project> projects = RESOURCE_MANAGER.list();
169-
assertFalse(projects.values().iterator().hasNext()); // TODO: change this when #421 is resolved
170+
assertFalse(projects.values().iterator().hasNext());
170171
RESOURCE_MANAGER.create(PARTIAL_PROJECT);
171172
RESOURCE_MANAGER.create(COMPLETE_PROJECT);
172173
for (Project p : RESOURCE_MANAGER.list().values()) {
@@ -181,6 +182,21 @@ public void testList() {
181182
}
182183
}
183184

185+
@Test
186+
public void tsetListPaging() {
187+
RESOURCE_MANAGER.create(PARTIAL_PROJECT);
188+
RESOURCE_MANAGER.create(COMPLETE_PROJECT);
189+
Page<Project> page = RESOURCE_MANAGER.list(ProjectListOption.pageSize(1));
190+
assertNotNull(page.nextPageCursor());
191+
Iterator<Project> iterator = page.values().iterator();
192+
compareReadWriteFields(COMPLETE_PROJECT, iterator.next());
193+
assertFalse(iterator.hasNext());
194+
page = page.nextPage();
195+
iterator = page.values().iterator();
196+
compareReadWriteFields(PARTIAL_PROJECT, iterator.next());
197+
assertFalse(iterator.hasNext());
198+
}
199+
184200
@Test
185201
public void testListFieldOptions() {
186202
RESOURCE_MANAGER.create(COMPLETE_PROJECT);

trunk/gcloud-java-storage/src/main/java/com/google/gcloud/storage/StorageException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
*/
3434
public class StorageException extends BaseServiceException {
3535

36-
// see: https://cloud.google.com/storage/docs/resumable-uploads-xml#practices
36+
// see: https://cloud.google.com/storage/docs/concepts-techniques#practices
3737
private static final Set<Error> RETRYABLE_ERRORS = ImmutableSet.of(
3838
new Error(504, null),
3939
new Error(503, null),

0 commit comments

Comments
 (0)