def _concurrent_update(lock_files, node, key, first_value, second_value, holder_path): holder = helpers.FilesystemDataHolder(holder_path) locker1 = fasteners.InterProcessLock(lock_files[0]) locker2 = fasteners.InterProcessLock(lock_files[1]) first = locker1.acquire(blocking=False) if first: # Give chance for both processes to acquire locks while locker2.acquire(blocking=False): locker2.release() time.sleep(0.1) else: locker2.acquire() node.attributes[key] = first_value if first else second_value holder['key'] = first_value if first else second_value holder.setdefault('invocations', 0) holder['invocations'] += 1 if first: locker1.release() else: with locker1: locker2.release() return first
def attribute_consuming_operation(ctx, holder_path, **_): holder = helpers.FilesystemDataHolder(holder_path) ctx.target_node.attributes.update(ctx.source_node.attributes) holder.update(**ctx.target_node.attributes) ctx.target_node.attributes['key2'] = ctx.source_node.attributes['key2'] holder['key2'] = ctx.target_node.attributes['key2']
def basic_relationship_operation(ctx, holder_path, **_): holder = helpers.FilesystemDataHolder(holder_path) operation_common(ctx, holder) holder['target_node_template_name'] = ctx.target_node_template.name holder['target_node_name'] = ctx.target_node.name holder['relationship_name'] = ctx.relationship.name holder['source_node_template_name'] = ctx.source_node_template.name holder['source_node_name'] = ctx.source_node.name
def dataholder(tmpdir): dataholder_path = str(tmpdir.join('dataholder')) holder = helpers.FilesystemDataHolder(dataholder_path) return holder
def get_node_id(ctx, holder_path, **_): helpers.FilesystemDataHolder(holder_path)[ctx.name] = ctx.node.id
def basic_node_operation(ctx, holder_path, **_): holder = helpers.FilesystemDataHolder(holder_path) operation_common(ctx, holder) holder['template_name'] = ctx.node_template.name holder['node_name'] = ctx.node.name
def relationship_operation(ctx, toolbelt, holder_path, **_): helpers.FilesystemDataHolder(holder_path)[ ctx.name] = toolbelt._op_context.source_node.name
def host_ip(toolbelt, holder_path, **_): helpers.FilesystemDataHolder(holder_path)['host_ip'] = toolbelt.host_ip