| Index: go/src/infra/gae/libs/gae/upstream_types.go | 
| diff --git a/go/src/infra/gae/libs/gae/upstream_types.go b/go/src/infra/gae/libs/gae/upstream_types.go | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..fdec0e663c331bf9baf90a272265565f21db1ed4 | 
| --- /dev/null | 
| +++ b/go/src/infra/gae/libs/gae/upstream_types.go | 
| @@ -0,0 +1,161 @@ | 
| +// Copyright 2015 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +// This file contains types which are mirrors/duplicates of the upstream SDK | 
| +// types. This exists so that users can depend solely on this wrapper library | 
| +// without necessarially needing an SDK implementation present. | 
| +// | 
| +// This was done (instead of type-aliasing from the github version of the SDK) | 
| +// because some of the types need to be tweaked (like TQTask.RetryOptions) to | 
| +// interact well with the wrapper, and the inconsistency of having some types | 
| +// defined by the gae package and others defined by the SDK was pretty awkward. | 
| + | 
| +package gae | 
| + | 
| +import ( | 
| +	"net/http" | 
| +	"time" | 
| +) | 
| + | 
| +// DSByteString is a short byte slice (up to 1500 bytes) that can be indexed. | 
| +type DSByteString []byte | 
| + | 
| +// BSKey is a key for a blobstore blob. | 
| +// | 
| +// Conceptually, this type belongs in the blobstore package, but it lives in the | 
| +// appengine package to avoid a circular dependency: blobstore depends on | 
| +// datastore, and datastore needs to refer to the BSKey type. | 
| +// | 
| +// Blobstore is NOT YET supported by gae, but may be supported later. Its | 
| +// inclusion here is so that the RawDatastore can interact (and round-trip) | 
| +// correctly with other datastore API implementations. | 
| +type BSKey string | 
| + | 
| +// DSGeoPoint represents a location as latitude/longitude in degrees. | 
| +// | 
| +// You probably shouldn't use these, but their inclusion here is so that the | 
| +// RawDatastore can interact (and round-trip) correctly with other datastore API | 
| +// implementations. | 
| +type DSGeoPoint struct { | 
| +	Lat, Lng float64 | 
| +} | 
| + | 
| +// Valid returns whether a DSGeoPoint is within [-90, 90] latitude and [-180, | 
| +// 180] longitude. | 
| +func (g DSGeoPoint) Valid() bool { | 
| +	return -90 <= g.Lat && g.Lat <= 90 && -180 <= g.Lng && g.Lng <= 180 | 
| +} | 
| + | 
| +// DSTransactionOptions are the options for running a transaction. | 
| +type DSTransactionOptions struct { | 
| +	// XG is whether the transaction can cross multiple entity groups. In | 
| +	// comparison, a single group transaction is one where all datastore keys | 
| +	// used have the same root key. Note that cross group transactions do not | 
| +	// have the same behavior as single group transactions. In particular, it | 
| +	// is much more likely to see partially applied transactions in different | 
| +	// entity groups, in global queries. | 
| +	// It is valid to set XG to true even if the transaction is within a | 
| +	// single entity group. | 
| +	XG bool | 
| +} | 
| + | 
| +// MCStatistics represents a set of statistics about the memcache cache.  This | 
| +// may include items that have expired but have not yet been removed from the | 
| +// cache. | 
| +type MCStatistics struct { | 
| +	Hits     uint64 // Counter of cache hits | 
| +	Misses   uint64 // Counter of cache misses | 
| +	ByteHits uint64 // Counter of bytes transferred for gets | 
| + | 
| +	Items uint64 // Items currently in the cache | 
| +	Bytes uint64 // Size of all items currently in the cache | 
| + | 
| +	Oldest int64 // Age of access of the oldest item, in seconds | 
| +} | 
| + | 
| +// TQStatistics represents statistics about a single task queue. | 
| +type TQStatistics struct { | 
| +	Tasks     int       // may be an approximation | 
| +	OldestETA time.Time // zero if there are no pending tasks | 
| + | 
| +	Executed1Minute int     // tasks executed in the last minute | 
| +	InFlight        int     // tasks executing now | 
| +	EnforcedRate    float64 // requests per second | 
| +} | 
| + | 
| +// TQRetryOptions let you control whether to retry a task and the backoff intervals between tries. | 
| +type TQRetryOptions struct { | 
| +	// Number of tries/leases after which the task fails permanently and is deleted. | 
| +	// If AgeLimit is also set, both limits must be exceeded for the task to fail permanently. | 
| +	RetryLimit int32 | 
| + | 
| +	// Maximum time allowed since the task's first try before the task fails permanently and is deleted (only for push tasks). | 
| +	// If RetryLimit is also set, both limits must be exceeded for the task to fail permanently. | 
| +	AgeLimit time.Duration | 
| + | 
| +	// Minimum time between successive tries (only for push tasks). | 
| +	MinBackoff time.Duration | 
| + | 
| +	// Maximum time between successive tries (only for push tasks). | 
| +	MaxBackoff time.Duration | 
| + | 
| +	// Maximum number of times to double the interval between successive tries before the intervals increase linearly (only for push tasks). | 
| +	MaxDoublings int32 | 
| + | 
| +	// If MaxDoublings is zero, set ApplyZeroMaxDoublings to true to override the default non-zero value. | 
| +	// Otherwise a zero MaxDoublings is ignored and the default is used. | 
| +	ApplyZeroMaxDoublings bool | 
| +} | 
| + | 
| +// TQTask represents a taskqueue task to be executed. | 
| +type TQTask struct { | 
| +	// Path is the worker URL for the task. | 
| +	// If unset, it will default to /_ah/queue/<queue_name>. | 
| +	Path string | 
| + | 
| +	// Payload is the data for the task. | 
| +	// This will be delivered as the HTTP request body. | 
| +	// It is only used when Method is POST, PUT or PULL. | 
| +	// url.Values' Encode method may be used to generate this for POST requests. | 
| +	Payload []byte | 
| + | 
| +	// Additional HTTP headers to pass at the task's execution time. | 
| +	// To schedule the task to be run with an alternate app version | 
| +	// or backend, set the "Host" header. | 
| +	Header http.Header | 
| + | 
| +	// Method is the HTTP method for the task ("GET", "POST", etc.), | 
| +	// or "PULL" if this is task is destined for a pull-based queue. | 
| +	// If empty, this defaults to "POST". | 
| +	Method string | 
| + | 
| +	// A name for the task. | 
| +	// If empty, a name will be chosen. | 
| +	Name string | 
| + | 
| +	// Delay specifies the duration the task queue service must wait | 
| +	// before executing the task. | 
| +	// Either Delay or ETA may be set, but not both. | 
| +	Delay time.Duration | 
| + | 
| +	// ETA specifies the earliest time a task may be executed (push queues) | 
| +	// or leased (pull queues). | 
| +	// Either Delay or ETA may be set, but not both. | 
| +	ETA time.Time | 
| + | 
| +	// The number of times the task has been dispatched or leased. | 
| +	RetryCount int32 | 
| + | 
| +	// Tag for the task. Only used when Method is PULL. | 
| +	Tag string | 
| + | 
| +	// Retry options for this task. May be nil. | 
| +	RetryOptions *TQRetryOptions | 
| +} | 
| + | 
| +// GICertificate represents a public certificate for the app. | 
| +type GICertificate struct { | 
| +	KeyName string | 
| +	Data    []byte // PEM-encoded X.509 certificate | 
| +} | 
|  |