trafficserver-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <>
Subject [jira] [Work logged] (TS-4723) ATS CARP Plugin
Date Wed, 10 Aug 2016 15:05:20 GMT


ASF GitHub Bot logged work on TS-4723:

                Author: ASF GitHub Bot
            Created on: 10/Aug/16 15:05
            Start Date: 10/Aug/16 15:05
    Worklog Time Spent: 10m 
      Work Description: Github user SolidWallOfCode commented on a diff in the pull request:
    --- Diff: plugins/experimental/carp/ ---
    @@ -0,0 +1,396 @@
    +/** @file
    +  Implements the CARP hash algorithm
    +  @section license License
    +  Licensed to the Apache Software Foundation (ASF) under one
    +  or more contributor license agreements.  See the NOTICE file
    +  distributed with this work for additional information
    +  regarding copyright ownership.  The ASF licenses this file
    +  to you under the Apache License, Version 2.0 (the
    +  "License"); you may not use this file except in compliance
    +  with the License.  You may obtain a copy of the License at
    +  Unless required by applicable law or agreed to in writing, software
    +  distributed under the License is distributed on an "AS IS" BASIS,
    +  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +  See the License for the specific language governing permissions and
    +  limitations under the License.
    + */
    +#include <ts/ts.h>
    +#include <stdio.h>
    +#include <memory.h>
    +#include <list>
    +#include <iostream>
    +#include <sstream>
    +#include "Common.h"
    +#include "CarpHashAlgorithm.h"
    +using namespace std;
    +HashNode::dump(string& s)
    +  stringstream ss;
    +  string sSockaddr;
    +  getStringFromSockaddr(reinterpret_cast<const struct sockaddr *>( &forwardAddr),
    +  ss << scheme << "://" << name << ":"<<listenPort<<"
("<<sSockaddr<<") weight:"<<weight<< (_status ?  string(" UP ") :
string(" DOWN ")); 
    +  if(_statusTime) {
    +    ss << "(" << time(NULL)-_statusTime<< "s ago in "<< _statusLatencyMs
<< "mS)";
    +  }
    +  ss << " hits:" << _hits;
    +  ss << " carp_noforwarded:" << _carp_noforwarded;
    +  ss << " carp_forwarded:" << _carp_forwarded;
    +  ss << endl;
    +  s += ss.str();
    +HashAlgorithm::addHost(std::string name, unsigned int port, std::string scheme, double
weight, bool self, struct sockaddr_storage fwdAddr)
    --- End diff --
    Pass `string` by `const&` where possible. 

Issue Time Tracking

    Worklog Id:     (was: 26280)
    Time Spent: 2h 40m  (was: 2.5h)

> ATS CARP Plugin
> ---------------
>                 Key: TS-4723
>                 URL:
>             Project: Traffic Server
>          Issue Type: New Feature
>          Components: Plugins
>            Reporter: Eric Schwartz
>            Assignee: Eric Schwartz
>             Fix For: 7.0.0
>          Time Spent: 2h 40m
>  Remaining Estimate: 0h
> Open sourcing this plugin we use internally within Yahoo in place of hierarchical caching.
> CARP is a plugin that allows you to group a bunch of ATS hosts into a cluster and share
cache space across the entire group. This is done with consistent hashing on the object URL
to generate an "owner" node in the cluster. Requests to any other node in the cluster will
be forwarded on to the corresponding owner. More info in the README.
> Difference from internal version of note:
> I've ripped out some code we weren't entirely sure we could open source because of a
hash function. If it turns out that we can open source this, I'll do so. The CarpHashAlgorithm
class is meant to be extensible, so any consistent hash function can replace it. The function
included here is pretty straightforward but not what we use in production, so just wanted
to use that caveat.
> One last caveat:
> You'll see some code and documentation in here for object replication. This is something
I added recently to CARP that allows you to specify an object be replicated a certain number
of times in the cluster. This is useful if you have a network partition or if you're performing
some sort of update. When an object's primary owner is unreachable, a node in the cluster
can go to the secondary owner if it's available rather than having to fall all the way back
to origin. While I've done some initial testing on this with my own cluster of hosts, it's
not been tested in production so use at your own risk for now. I'll be sure to keep the open
source community informed on the progress of our tests with this feature.

This message was sent by Atlassian JIRA

View raw message