Ejemplo n.º 1
0
    def delete(self, keys):
        request = datastore_pb.DeleteRequest()
        for key in keys:
            key_pb = request.add_key()
            key_pb.MergeFrom(key._ToPb())

        yield self._make_request('Delete', request.Encode())
  def __delete_v1_key(self, v1_key, v1_txn):
    """Deletes an entity from a v1 key in a transaction."""
    v3_key = entity_pb.Reference()
    self.__entity_converter.v1_to_v3_reference(v1_key, v3_key)
    v3_txn = datastore_pb.Transaction()
    self.__service_converter.v1_to_v3_txn(v1_txn, v3_txn)

    v3_delete_req = datastore_pb.DeleteRequest()
    v3_delete_req.mutable_transaction().CopyFrom(v3_txn)
    v3_delete_req.add_key().CopyFrom(v3_key)
    v3_delete_resp = datastore_pb.DeleteResponse()
    self.__make_v3_call('Delete', v3_delete_req, v3_delete_resp)
Ejemplo n.º 3
0
  def delete_request(self, app_id, http_request_data):
    """ High level function for doing deletes.

    Args:
      app_id: Name of the application.
      http_request_data: Stores the protocol buffer request from the AppServer.
    Returns:
      An encoded delete response.
    """
    global datastore_access

    delreq_pb = datastore_pb.DeleteRequest( http_request_data )
    delresp_pb = api_base_pb.VoidProto()

    if READ_ONLY:
      logger.warning(
        'Unable to delete in read-only mode: {}'.format(delreq_pb))
      raise gen.Return(
        ('', datastore_pb.Error.CAPABILITY_DISABLED,
         'Datastore is in read-only mode.'))

    try:
      yield datastore_access.dynamic_delete(app_id, delreq_pb)
      raise gen.Return((delresp_pb.Encode(), 0, ''))
    except dbconstants.InternalError as error:
      raise gen.Return(('', datastore_pb.Error.INTERNAL_ERROR, str(error)))
    except dbconstants.Timeout as error:
      raise gen.Return(('', datastore_pb.Error.TIMEOUT, str(error)))
    except dbconstants.BadRequest as error:
      raise gen.Return(('', datastore_pb.Error.BAD_REQUEST, str(error)))
    except zktransaction.ZKBadRequest as error:
      logger.exception('Illegal argument during {}'.format(delreq_pb))
      raise gen.Return(('', datastore_pb.Error.BAD_REQUEST, str(error)))
    except zktransaction.ZKInternalException:
      logger.exception('ZKInternalException during {}'.format(delreq_pb))
      raise gen.Return(
        ('', datastore_pb.Error.INTERNAL_ERROR,
         'Internal error with ZooKeeper connection.'))
    except zktransaction.ZKTransactionException:
      logger.exception('Concurrent transaction during {}'.format(delreq_pb))
      raise gen.Return(
        ('', datastore_pb.Error.CONCURRENT_TRANSACTION,
         'Concurrent transaction exception on delete.'))
    except dbconstants.AppScaleDBConnectionError:
      logger.exception('DB connection error during delete')
      raise gen.Return(
        ('', datastore_pb.Error.INTERNAL_ERROR,
         'Datastore connection error on delete.'))
Ejemplo n.º 4
0
def _delete_entities(ds_access, entity_keys):
  """ Deletes a list of datastore entities.

  Args:
    ds_access: A DatastoreDistributed client.
    entity_keys: A list of datastore.Key objects.
  Raises:
    ApplicationError if unable to delete entities.
  """
  request = datastore_pb.DeleteRequest()
  for entity_key in entity_keys:
    key = request.add_key()
    key.CopyFrom(entity_key._ToPb())

  response = datastore_pb.DeleteResponse()
  ds_access._Dynamic_Delete(request, response)
Ejemplo n.º 5
0
    def __delete_v3_reference(self, v3_key, v3_txn):
        """Deletes a v3 entity.

    Args:
      v3_key: an entity_pb.Reference
      v3_txn: a datastore_pb.Transaction or None

    Returns:
      the number of index writes that occurred
    """
        v3_delete_req = datastore_pb.DeleteRequest()
        if v3_txn:
            v3_delete_req.mutable_transaction().CopyFrom(v3_txn)
        v3_delete_req.add_key().CopyFrom(v3_key)
        v3_delete_resp = datastore_pb.DeleteResponse()
        self.__make_v3_call('Delete', v3_delete_req, v3_delete_resp)
        return v3_delete_resp.cost().index_writes()
    def __apply_v4_deprecated_mutation(self, v4_deprecated_mutation, v4_txn):
        """Applies a v4 DeprecatedMutation.

    Args:
      v4_deprecated_mutation: a datastore_v4_pb.DeprecatedMutation
      v4_txn: an optional v4 transaction handle or None

    Returns:
      a datastore_v4_pb.DeprecatedMutationResult
    """
        index_writes = 0
        v3_txn = None
        if v4_txn:
            v3_txn = datastore_pb.Transaction()
            self.__service_converter.v4_to_v3_txn(v4_txn, v3_txn)

        for v4_entity in v4_deprecated_mutation.insert_list():
            v3_entity = entity_pb.EntityProto()
            self.__entity_converter.v4_to_v3_entity(v4_entity, v3_entity)
            index_writes += self.__insert_v3_entity(v3_entity, v3_txn)

        for v4_entity in v4_deprecated_mutation.update_list():
            v3_entity = entity_pb.EntityProto()
            self.__entity_converter.v4_to_v3_entity(v4_entity, v3_entity)
            index_writes += self.__update_v3_entity(v3_entity, v3_txn)

        v3_insert_auto_req = datastore_pb.PutRequest()
        if v3_txn:
            v3_insert_auto_req.mutable_transaction().CopyFrom(v3_txn)
        for v4_entity in v4_deprecated_mutation.insert_auto_id_list():
            v3_entity = entity_pb.EntityProto()
            self.__entity_converter.v4_to_v3_entity(v4_entity, v3_entity)
            v3_insert_auto_req.entity_list().append(v3_entity)
        v3_insert_auto_id_resp = datastore_pb.PutResponse()
        self.__make_v3_call('Put', v3_insert_auto_req, v3_insert_auto_id_resp)
        index_writes += v3_insert_auto_id_resp.cost().index_writes()

        v3_upsert_req = datastore_pb.PutRequest()
        if v3_txn:
            v3_upsert_req.mutable_transaction().CopyFrom(v3_txn)
        for v4_entity in v4_deprecated_mutation.upsert_list():
            v3_entity = entity_pb.EntityProto()
            self.__entity_converter.v4_to_v3_entity(v4_entity, v3_entity)
            v3_upsert_req.entity_list().append(v3_entity)
        v3_upsert_resp = datastore_pb.PutResponse()
        self.__make_v3_call('Put', v3_upsert_req, v3_upsert_resp)
        index_writes += v3_upsert_resp.cost().index_writes()

        v3_delete_req = datastore_pb.DeleteRequest()
        if v3_txn:
            v3_delete_req.mutable_transaction().CopyFrom(v3_txn)
        for v4_key in v4_deprecated_mutation.delete_list():
            self.__entity_converter.v4_to_v3_reference(v4_key,
                                                       v3_delete_req.add_key())
        v3_delete_resp = datastore_pb.DeleteResponse()
        self.__make_v3_call('Delete', v3_delete_req, v3_delete_resp)
        index_writes += v3_delete_resp.cost().index_writes()

        v4_deprecated_mutation_result = datastore_v4_pb.DeprecatedMutationResult(
        )
        for v3_ref in v3_insert_auto_id_resp.key_list():
            self.__entity_converter.v3_to_v4_key(
                v3_ref, v4_deprecated_mutation_result.add_insert_auto_id_key())
        v4_deprecated_mutation_result.set_index_updates(index_writes)

        return v4_deprecated_mutation_result