anchor.diff:      ErrorGeneral :: atom(),
       ErrorDetail :: term().
   %% ====================================================================
  -write({uuid, Uuid}, Buf) -> % todo alow only FullFilePath for better performance
  +write({uuid, Uuid}, Buf) ->
       ct:print("write/2 ~p",[{uuid, Uuid}]),
  -    case logical_files_manager:get_file_full_name_by_uuid(Uuid) of
  +    case get_file_path_from_cache({uuid, Uuid}) of
           {ok, FullFilePath} -> write(FullFilePath, Buf);
           Error -> Error
       end;
  -write(File, Buf) ->
  -    ct:print("write/2 ~p",[File]),
  +write(FilePath, Buf) ->
  +    ct:print("write/2 ~p",[FilePath]),
       case write_enabled(fslogic_context:get_user_dn()) of
           true ->
  -            {Response, Response2} = getfilelocation(File),
  -            case Response of
  -                ok ->
  -                    {Storage_helper_info, FileId} = Response2,
  +            case getfilelocation(FilePath) of
  +                {ok, {Storage_helper_info, FileId}} ->
                       Res = storage_files_manager:write(Storage_helper_info, FileId, Buf),
                       case {is_integer(Res), event_production_enabled("write_event")} of
                           {true, true} ->
  
positive.code:     ErrorGeneral :: atom(),
      ErrorDetail :: term().
  %% ====================================================================
  truncate({uuid, Uuid}, Size) -> % todo alow only FullFilePath for performance reasons
      case logical_files_manager:get_file_full_name_by_uuid(Uuid) of
          {ok, FullFilePath} -> truncate(FullFilePath, Size);
          Error -> Error
      end;
  truncate(File, Size) ->
      {Response, Response2} = getfilelocation(File),
      case Response of
          ok ->
              {Storage_helper_info, FileId} = Response2,
              Res = storage_files_manager:truncate(Storage_helper_info, FileId, Size),
              case {Res, event_production_enabled("truncate_event")} of
                  {ok, true} ->
                      Ctx = fslogic_context:get_user_context(),
                      spawn(fun() ->
                          fslogic_context:set_user_context(Ctx),
                          {ok, FullFileName} = fslogic_path:get_full_file_name(File), %todo cache somehow
                          TruncateEvent = [{"type", "truncate_event"}, {"user_dn", fslogic_context:get_user_dn()}, {"filePath", File}, {"filePath", FullFileName}],
                          gen_server:call(?Dispatcher_Name, {cluster_rengine, 1, {event_arrived, TruncateEvent}}),
                          TruncateEventAvailableBlocks = [{"type", "truncate_for_available_blocks"}, {"user_dn", fslogic_context:get_user_dn()}, {"filePath", File},
                              {"blocks", [{0, Size}]}, {"filePath", FullFileName}],
                          gen_server:call(?Dispatcher_Name, {cluster_rengine, 1, {event_arrived, TruncateEventAvailableBlocks}})
                      end);
                  _ ->
                      ok
              end,
              Res;
          _ -> {Response, Response2}
      end.
  
  %% delete/1
  
negative.code:                             Ctx = fslogic_context:get_user_context(),
                              spawn(fun() ->
                                  fslogic_context:set_user_context(Ctx),
                                  {ok, #fileattributes{size = FileSize}} = logical_files_manager:getfileattr(FilePath), %todo IMPORTANT: this needs optimization!!!,  but cannot be done asynchronously
                                  {ok, FullFileName} = get_file_path_from_cache(FilePath),
                                  WriteEvent = [{"type", "write_event"}, {"user_dn", fslogic_context:get_user_dn()},
                                      {"bytes", Res}, {"blocks", [{FileSize - Res, Res}]}, {"filePath", FullFileName}],
                                  gen_server:call(?Dispatcher_Name, {cluster_rengine, 1, {event_arrived, WriteEvent}}),
  