Description
See below:
OPERATING SYSTEM
$ uname -mrs
Linux 3.19.5-100.fc20.x86_64 x86_64
ENVIRONMENT VARIABLES
PYTHON 2.7
export PYTHONHOME=/usr/bin/python2.7
export PYTHONPATH=/usr/lib/python2.7/site-packages
PYTHON modules for GCP
export PYTHONPATH=$PYTHONPATH:/home/charles/google-cloud-sdkgoogle-cloud-sdk/bin
export PYTHONPATH=$PYTHONPATH:/home/charles/google-cloud-sdkgoogle-cloud-sdk/lib
export PYTHONPATH=$PYTHONPATH:/home/charles/google-cloud-sdkgoogle-cloud-sdk/lib/googlecloudsdk
export PYTHONPATH=$PYTHONPATH:/home/charles/google-cloud-sdkgoogle-cloud-sdk/lib/googlecloudsdk/gcloud
export PYTHONPATH=$PYTHONPATH:/home/charles/google-cloud-sdkgoogle-cloud-sdk/lib/googlecloudapis
export PYTHONPATH=$PYTHONPATH:/home/charles/google-cloud-sdkgoogle-cloud-sdk/platform
export PYTHONPATH=$PYTHONPATH:/home/charles/google-cloud-sdkgoogle-cloud-sdk/platform/bq
export PYTHONPATH=$PYTHONPATH:/home/charles/google-cloud-sdkgoogle-cloud-sdk/platform/gcutil
export PYTHONPATH=$PYTHONPATH:/home/charles/google-cloud-sdkgoogle-cloud-sdk/platform/gcutil/lib
export PYTHONPATH=$PYTHONPATH:/home/charles/google-cloud-sdkgoogle-cloud-sdk/platform/gsutil
export PYTHONPATH=$PYTHONPATH:/home/charles/google-cloud-sdkgoogle-cloud-sdk/platform/gsutil/gslib
export PYTHONPATH=$PYTHONPATH:/home/charles/google-cloud-sdkgoogle-cloud-sdk/platform/gsutil/third_party
export PATH=$PATH:$PYTHONHOME
export PATH=$PATH:$PYTHONPATH
Google AppEngine SDK
export PATH=$PATH:/home/charles/google_appengine/
Google Cloud SDK
export CLOUDSDK_CONFIG=/home/charles/.config/gcloud
export CLOUDSDK_PYTHON=/usr/bin/python2.7
export CLOUDSDK_PYTHON_SITEPACKAGES=1
BOTO
export BOTO_CONFIG=/home/charles/.boto
export NVM_DIR="/home/charles/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
The next line updates PATH for the Google Cloud SDK.
source '/home/charles/google-cloud-sdk/path.bash.inc'
The next line enables bash completion for gcloud.
source '/home/charles/google-cloud-sdk/completion.bash.inc'
FORM OF AUTHENTICATION
The credentialed account being used is the owner of the Google project, for which Cloud Datastore API is enabled.
PYTHON CODE
from gcloud import storage
storage.set_default_bucket('')
storage.set_default_project(_PROJECT_NAME)
from gcloud import datastore
datastore.set_default_dataset_id(_DATA_SET_ID)
datastore.set_defaults(namespace=_NAMESPACE)
from gcloud.datastore.batch import Batch
import traceback
def Load_Datastore():
try:
Get_Bucket_Metadata()
#set configuration variables
storage_conn = storage.get_connection()
storage.set_default_connection(storage_conn)
datastore_conn = datastore.get_connection()
datastore.set_default_connection(datastore_conn)
for _BUCKET_NAME in _BUCKET_LIST:
print "Bucket Name: %s" % (_BUCKET_NAME)
.
.
.
#an empty list is false
if not _RECORDS:
print "_RECORDS is empty"
else:
print "there are %s records to write into Datastore"%(str(len(_RECORDS)))
with datastore.batch.Batch(connection=datastore_conn) as batch:
_ENTITIES=[]
for _RECORD in _RECORDS:
_PROPERTIES=[]
if _RECORD:
for _KEY_VALUES in _RECORD:
_KEY_VALUE_PAIR=_KEY_VALUES.split('|')
if str(_KEY_VALUE_PAIR[0])=='ROW_KEY':
_ENTITY_KEY=str(_KEY_VALUE_PAIR[1])
else:
_PROPERTIES.append("%s|%s"%(str(_KEY_VALUE_PAIR[0]),str(_KEY_VALUE_PAIR[1])))
if not _PROPERTIES:
print "_PROPERTIES is empty"
else:
try:
key = datastore.Key(_SOURCE_TABLE_NAME.upper(),_ENTITY_KEY,namespace=_NAMESPACE,dataset_id=_DATA_SET_ID)
try:
DS_ENTITY = datastore.Entity(key)
for _PROPERTY in _PROPERTIES:
_NAME_VALUE=_PROPERTY.split('|')
_COLUMN_NAME=str(_NAME_VALUE[0])
_COLUMN_VALUE=str(_NAME_VALUE[1])
DS_ENTITY.update({_COLUMN_NAME:_COLUMN_VALUE})
# Now let's save it to our datastore:
_ENTITIES.append(DS_ENTITY)
except Exception, inst:
print "datastore.Entity(%s) Unexpected error: %s"%(str(_ENTITY_KEY),str(sys.exc_info()[0]))
if isinstance(inst,ValueError):
print "ValueError: %s"%(inst.message)
if isinstance(inst,AttributeError):
print "AttributeError: %s"%(inst.message)
except Exception, inst:
print "datastore.Key(_SOURCE_TABLE_NAME,_ENTITY_KEY,_NAMESPACE,_DATASET_ID Unexpected error: %s"%(str(sys.exc_info()[0]))
if isinstance(inst,ValueError):
print "ValueError: %s"%(inst.message)
if isinstance(inst,AttributeError):
print "AttributeError: %s"%(inst.message)
for _ENTITY in _ENTITIES:
batch.put(_ENTITY)
print 'batch.put(_ENTITY)'
except Exception, inst:
print '\nLoad_Datastore() Unexpected error: ' + str(sys.exc_info()[0])
if isinstance(inst,ValueError):
print "ValueError: %s\n"%(inst.message)
if isinstance(inst,AttributeError):
print "AttributeError: %s\n"%(inst.message)
if isinstance(inst,TypeError):
print "TypeError: %s\n"%(inst.message)
print '-'*60
traceback.print_exc(file=sys.stdout)
print '-'*60
raise
STACK TRACE
Load_Datastore() Unexpected error: <class 'gcloud.exceptions.ServiceUnavailable'>
Traceback (most recent call last):
File "/home/charles/workspace_Python/HBaseSchemaFromXML/pkg1/datastore_loader.py", line 326, in Load_Datastore
print 'batch.put(_ENTITY)'
File "/usr/lib/python2.7/site-packages/gcloud-0.5.0-py2.7.egg/gcloud/datastore/batch.py", line 232, in exit
self.commit()
File "/usr/lib/python2.7/site-packages/gcloud-0.5.0-py2.7.egg/gcloud/datastore/batch.py", line 207, in commit
response = self.connection.commit(self._dataset_id, self.mutation)
File "/usr/lib/python2.7/site-packages/gcloud-0.5.0-py2.7.egg/gcloud/datastore/connection.py", line 324, in commit
datastore_pb.CommitResponse)
File "/usr/lib/python2.7/site-packages/gcloud-0.5.0-py2.7.egg/gcloud/datastore/connection.py", line 108, in _rpc
data=request_pb.SerializeToString())
File "/usr/lib/python2.7/site-packages/gcloud-0.5.0-py2.7.egg/gcloud/datastore/connection.py", line 85, in _request
raise make_exception(headers, content, use_json=False)
ServiceUnavailable: 503 Backend Error
Unexpected error: <class 'gcloud.exceptions.ServiceUnavailable'>
Exception instance type: <class 'gcloud.exceptions.ServiceUnavailable'>
done.
Ran 0 tests in 0.000s
NOTES
The script executes all of the batch.put() statements, and then throws the above error after the 'when' clause finishes.
Any suggestions on how to fix this bug are appreciated